package com.quiputechnology.nexwm.dao.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.quiputechnology.nexwm.dao.UsuarioDao;
import com.quiputechnology.nexwm.model.Usuario;

@Repository("usuarioDao")
public class UsuarioDaoHibernate extends HibernateDaoSupport implements
		UsuarioDao {

	@Autowired
	public UsuarioDaoHibernate(SessionFactory sessionFactory) {
		setSessionFactory(sessionFactory);
	}

	@SuppressWarnings("rawtypes")
	@Override
	public Usuario getUsuarioPorUsername(String username) {
		List usuarios = getHibernateTemplate().find(
				"from Usuario where username=?", username);
		if (usuarios.size() == 1) {
			return (Usuario) usuarios.get(0);
		} else {
			return null;
		}
	}

	@Override
	public List<Usuario> getUsuarios() {
		return getHibernateTemplate().loadAll(Usuario.class);
	}

	@Override
	public void registrar(Usuario usuario) {
		getHibernateTemplate().save(usuario);

	}

	@Override
	public void modificar(Usuario usuario) {
		getHibernateTemplate().update(usuario);
	}

	@Override
	public void eliminar(Usuario usuario) {
		getHibernateTemplate().delete(usuario);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> getUsuariosPorNombre(String nombre) {
		return getHibernateTemplate().find("from Usuario where nombre like ?",
				"%" + nombre + "%");
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> getUsuarioPorFiltro(Usuario filtro) {
		Criteria criteria = getSession().createCriteria(filtro.getClass());
		Example example = Example.create(filtro).enableLike(MatchMode.ANYWHERE)
				.ignoreCase().excludeZeroes();
		criteria.add(example);
		return criteria.list();
	}

}
